/*
 * Project:     My Project Work, Copyright (C) 2011
 * Created at:  13.08.2011
 */
package de.myprojectwork.common.util;

import de.myprojectwork.model.dto.AbstractDto;
import de.myprojectwork.model.dto.Radar;
import de.myprojectwork.model.dto.Todo;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.time.DateFormatUtils;

/**
 *
 * @author Chris Holdschuh
 */
public class CommonUtil {
    
    public static String format(Date date) {
        if (date != null) {
            return DateFormatUtils.format(date, "dd.MM.yyyy");
        } else {
            return "";
        }
    }
    
    public static <T extends AbstractDto> int getNextOrderNumber(List<T> list, T parent) throws MyProjectWorkException {
        if (list != null && !list.isEmpty()) {
            int nextOrderNumber = 0;
            if (list.get(0) instanceof Radar) {
                for (T t : list) {
                    Radar item = (Radar) t;
                    if (item.getOrderNumber() > nextOrderNumber) 
                        nextOrderNumber = item.getOrderNumber();
                }
                return nextOrderNumber +1;

            } else if (list.get(0) instanceof Todo) {
                int parentId = parent != null ? parent.getId() : 0;
                List<Todo> childList = new ArrayList<>();
                for (T t : list) { // Items der Ebene ermitteln
                    if (((Todo)t).getFkParent() == parentId) 
                        childList.add((Todo)t);
                }
                for (Todo t : childList) { // Order-Nummer innerhalb einer Ebene ermitteln
                    if (t.getOrderNumber() > nextOrderNumber) 
                        nextOrderNumber = t.getOrderNumber();
                }
                return nextOrderNumber + 1;
            } 
        } else {
            throw new MyProjectWorkException("Order-Nummer kann nicht ermittelt werden. Liste ist Null oder leer.");
        }
        throw new MyProjectWorkException("Übergebene Objektklasse wird nicht unterstützt.");
    }
}
